package com.vviton.zyhj.common.content;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

/**
 * 
 * ClassName: SpringContext <br/>
 * Function: SpringContext. <br/>
 * Date: 2016年3月10日 下午3:56:19 <br/>
 *
 * @author qiaocf
 * @version 1.0
 * @since JDK 1.7
 */
public class SpringContext implements ServletContextListener {

    /** springContext **/
    private static WebApplicationContext springContext;

    /**
     * 
     * contextDestroyed,(销毁). <br/>
     * Author: qiaocf <br/>
     * Create Date: 2016年3月10日 <br/>
     * =============================================================== <br/>
     * Modifier: qiaocf <br/>
     * Modify Date: 2016年3月10日 <br/>
     * Modify Description: <br/>
     * =============================================================== <br/>
     * 
     * @param event
     * @since JDK 1.7
     */
    @Override
    public void contextDestroyed(ServletContextEvent event) {

    }

    /**
     * 
     * contextInitialized,(初始化). <br/>
     * Author: qiaocf <br/>
     * Create Date: 2016年3月10日 <br/>
     * =============================================================== <br/>
     * Modifier: qiaocf <br/>
     * Modify Date: 2016年3月10日 <br/>
     * Modify Description: <br/>
     * =============================================================== <br/>
     * 
     * @param event
     * @since JDK 1.7
     */
    @Override
    public void contextInitialized(ServletContextEvent event) {
        springContext = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());
    }

    /** 获取springContext @return WebApplicationContext **/
    public static WebApplicationContext getSpringContext() {
        return springContext;
    }

    /**
     * 
     * getBean,(获取实体). <br/>
     * Author: qiaocf <br/>
     * Create Date: 2016年3月10日 <br/>
     * ===============================================================<br/>
     * Modifier: qiaocf <br/>
     * Modify Date: 2016年3月10日 <br/>
     * Modify Description: <br/>
     * ===============================================================<br/>
     * 
     * @param name 实体名
     * @return Object
     * @since JDK 1.7
     */
    public static Object getBean(String name) {
        return springContext.getBean(name);
    }

    /**
     * 
     * getBean,(获取实体). <br/>
     * Author: qiaocf <br/>
     * Create Date: 2016年3月10日 <br/>
     * ===============================================================<br/>
     * Modifier: qiaocf <br/>
     * Modify Date: 2016年3月10日 <br/>
     * Modify Description: <br/>
     * ===============================================================<br/>
     * 
     * @param clazz 实体的class
     * @param <T> 泛型
     * @return T  泛型
     * @since JDK 1.7
     */
    public static <T> T getBean(Class<T> clazz) {
        return springContext.getBean(clazz);
    }

}
